import Mock from "mockjs";
const Random = Mock.Random;

// Mock.Random 的方法在数据模板中称为『占位符』，书写格式为 @占位符(参数 [, 参数])
// 模拟 /api/user 接口
Mock.mock('/api/user', 'get', {
  code: 200,
  message: "操作成功",
  data: {
    id: 1,
    name: '@cname',// 生成随机中文名
    gender: '@pick(["男", "女"])', // 生成随机性别
    birthday: '@date', // 生成随机生日
    email: '@email',// 生成随机邮箱
    bio: '@csentence(10,20)', // 生成随机个人简介，10到20个字之间的一句话
  },
  // data: {
  //   id: 1,
  //   name: Random.cname(),// 生成随机中文名
  //   gender: Random.pick(["男", "女"]), // 生成随机性别
  //   birthday: Random.date(), // 生成随机生日
  //   email: Random.email(),// 生成随机邮箱
  //   bio: Random.csentence(10, 20), // 生成随机个人简介
  // },
});

/**
 * 使用 Mock.js 生成用户数据的模拟对象。
 * 
 * 这里使用箭头函数的形式（如 name: () => Random.cname()），
 * 是为了确保每次生成数据时都调用对应的 Random 方法，
 * 从而为每个用户生成不同的随机值。
 * 如果直接写成 name: Random.cname()，则所有用户的 name 都会是同一个值，
 * 因为只会在 Mock.mock 调用时执行一次。
 */
const users = Mock.mock({
  'list|1-10': [{ // 定义一个名为 'list' 的数组，数组长度在 1 到 10 之间随机生成
    'id|+1': 1, // 生成递增的 用户ID，从1开始
    name: () => Random.cname(), // 生成随机中文名
    gender: () => Random.pick(["男", "女"]), // 生成随机性别
    birthday: () => Random.date(), // 生成随机生日
    email: () => Random.email(), // 生成随机邮箱
    bio: () => Random.csentence(10, 20), // 生成随机个人简介（10到20个汉字）
  }]
});

// 模拟获取用户列表数据接口
Mock.mock('/api/user/getList', 'get', {
  code: 200,
  message: "操作成功",
  data: users.list,
});


// 模拟根据用户ID获取用户数据接口
// 使用正则表达式来从请求的 URL 中提取用户 ID
Mock.mock(/\/api\/user\/getUserById/, 'get', (req, res) => {
  console.log("req:", req)
  const id = req.url.match(/id=(\d+)/)[1];
  // 根据用户ID查询用户
  const user = users.list.find(user => user.id == id);
  console.log('user:', user)
  return {
    code: 200,
    message: "操作成功",
    data: user,
  }
});

